package com.briup.day31;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @author ThinkBook
 */
public class TestMethod {
    public static void main(String[] args) throws Exception{
        Class<Student> studentClass = Student.class;
        // getMethods()类中所有的public修饰的方法，包含继承的（会输出Object类中的public方法）
        Method[] methods = studentClass.getMethods();
        for (Method method : methods) {
            System.out.println(method);
        }
        System.out.println("--------------------------");
        // getDeclaredMethods() 类中所有的方法（不包含继承的）
        Method[] declaredMethods = studentClass.getDeclaredMethods();
        for (Method method : declaredMethods) {
            System.out.println(method);
        }
        System.out.println("--------------------------");

        // getMethod() 获取类中指定名称的public修饰的方法（可以获取父类）
        Method getId = studentClass.getMethod("getId");
        System.out.println(getId);

        // getDeclaredMethod() 获取类中指定名称的所有方法（不包括父类中的方法）
        Method setId = studentClass.getDeclaredMethod("setId", String.class);
        System.out.println(setId);
        System.out.println("---------------------------------");

        Constructor<Student> constructor = studentClass.getConstructor();
        Student student = constructor.newInstance();
        System.out.println(student);
        // student.setId("1002")
        setId.setAccessible(true);
        setId.invoke(student, "1002");

        // student.getId();
        String id = (String) getId.invoke(student);
        System.out.println(id);
    }
}
